package com.xbdun.service.bmp.service.system;

import java.util.List;
import java.util.Map;

import com.xbdun.common.api.Client;
import com.xbdun.common.page.Pager;
import com.xbdun.common.qr.LoginMacResponse;
import com.xbdun.facade.bmp.request.open.CreateUserByInviteCodeRequest;
import com.xbdun.facade.bmp.request.system.LoginCanPagesRequest;
import com.xbdun.facade.bmp.request.system.ModifyOrgUserRequest;
import com.xbdun.facade.bmp.request.system.ModifyUserPowerRequest;
import com.xbdun.facade.bmp.request.system.OrgUserPagerRequest;
import com.xbdun.facade.bmp.request.system.OrgUserPowerMenuRequest;
import com.xbdun.facade.bmp.request.system.OrgUserRequest;
import com.xbdun.facade.bmp.request.system.QueryOrgUsersRequest;
import com.xbdun.facade.bmp.request.system.UserSpecialPowerRequest;
import com.xbdun.facade.bmp.response.open.OrgUserBkgeResponse;
import com.xbdun.facade.bmp.response.system.LoginOrgUserMenuResponse;
import com.xbdun.facade.bmp.response.system.OrgUserPagerResponse;
import com.xbdun.facade.bmp.response.system.OrgUserResponse;
import com.xbdun.facade.bmp.response.system.QueryOrgUsersResponse;
import com.xbdun.facade.bmp.result.user.CreateUserByInviteCodeResult;

/**
* @ClassName: OrgUserService
* @Description: 当前机构下的用户
* @author zhanggt 360730440@qq.com
* @date 2017年4月27日 下午1:48:48
*/
public interface OrgUserService {

	/**
	*新增机构用户
	* @Title: addOrgUser
	* @Description: 新增机构用户
	* @param request
	* @param client   设定文件
	 */
	public void addOrgUser(OrgUserRequest request, Client client)throws Exception;

	/**
	* 新增用户机构下的权限
	* @Title: addUserPower
	* @Description	新增用户机构下的权限
	* @param request	请求参数
	* @param client     客户端
	* @return void      返回类型
	 */
	public void addUserDptRolePower(ModifyUserPowerRequest request, Client client)throws Exception;

	/**
	* 删除用户机构下的权限
	* @Title: delUserPower
	* @Description	删除用户机构下的权限
	* @param request	请求参数
	* @param client     客户端
	* @return void    返回类型
	 */
	public void delUserDptRolePower(ModifyUserPowerRequest request, Client client)throws Exception;

	/**
	* 操作机构用户下新增特殊权限和删除特殊权限
	* @Title: modifyUserSpecialPower
	* @Description: 操作机构用户下新增特殊权限和删除特殊权限
	* @param request	请求对象
	* @param client		客户端
	* @return void    返回类型
	 */
	public void modifyUserSpecialPower(UserSpecialPowerRequest request, Client client)throws Exception;
	/**
	* 查询机构下用户
	* @Title: queryOrgUserPager
	* @Description 查询机构下用户
	* @param request		请求参数
	* @param client			客户端
	* @throws Exception    设定文件
	* @return Pager<OrgUserPagerResponse>    返回类型
	 */
	public Pager<OrgUserPagerResponse> queryOrgUserPager(OrgUserPagerRequest request, Client client)throws Exception;

	/**
	* 查询用户有效权限
	* @Title: queryOrgUserPower
	* @Description	查询用户有效权限,如果userId为空，那么就会默认为Client中的用户Id
	* @param request 请求对象
	* @param client	客户端
	* @return List<String>    返回类型
	 */
	public List<String> queryOrgUserPower(OrgUserPowerMenuRequest request,Client client)throws Exception;

	/**
	* 用户登录成功后查询用户当前的菜单
	* @Title: loginOrgUserMenu
	* @Description	用户登录成功后查询用户当前的菜单
	* @param client	客户端
	* @return List<LoginOrgUserMenuResponse>    返回类型
	 */
	public List<LoginOrgUserMenuResponse> loginOrgUserMenu(Client client);

	/**
	 * 查询机构用户详情
	 * @Title: getOrgUserInfo
	 * @Description: 查询机构用户详情
	 * @param userId	机构用户id,
	 * @param client		客户端
	 * @return OrgUserResult    返回类型
	 */
	public OrgUserResponse getOrgUserInfo(String userId,Client client) throws Exception;

	/**
	 * 修改机构用户信息
	 * @Title: modifyOrgUserById
	 * @Description: 修改机构用户信息
	 * @param request	机构用户请求信息,
	 * @param client		客户端
	 * @return OrgUserResult    返回类型
	 */
	public void modifyOrgUserById(ModifyOrgUserRequest request, Client client) throws Exception;

	/**
	 * 删除机构用户信息
	 * @Title: deleteOrgUser
	 * @Description: 删除机构用户信息
	 * @param userId 删除的机构用户id,
	 * @param client		客户端
	 * @return OrgUserResult    返回类型
	 */
	public void deleteOrgUser(String userId, Client client);
	
	/**
	* 根据用户编号查询所属的企业
	* @Title: queryOrgUsersPager
	* @Description	根据用户编号查询所属的企业
	* @param request
	* @return Pager<QueryOrgUsersResponse>    返回类型
	 */
	public Pager<QueryOrgUsersResponse> queryOrgUsersPager(QueryOrgUsersRequest request);

	/**
	* @Title: loginCanPages
	* @Description: 查询机构用户下能够登录的平台
	* @param request 机构编号
	* @return    设定文件
	* @return List<LoginCanPagesResponse>    返回类型
	 */
	public List<LoginMacResponse> loginCanPages(LoginCanPagesRequest request)throws Exception;

	/**
	* @Title: getUserByOrgUserCode
	* @Description: 查询机构用户信息
	* @param orgCode		机构编号
	* @param userCode	 	用户编号
	* @return QueryOrgUsersResponse    返回类型
	*/
	public QueryOrgUsersResponse getUserByOrgUserCode(Long orgCode, Long userCode)throws Exception;

	/**
	* @Title: getUserAuthEvent
	* @Description: 获取当前用户对应系统的权限
	* @param client
	* @throws Exception    设定文件
	* @return String    返回类型
	 */
	public String getUserAuthEvent(Client client)throws Exception;
	
	/**
	* @Title: createUserByInviteCode
	* @Description: 根据邀请码创建用户
	* @throws Exception    设定文件
	* @return CreateUserByInviteCodeResponse    返回类型
	 */
	public CreateUserByInviteCodeResult createUserByInviteCode(CreateUserByInviteCodeRequest request)throws Exception;

	/**
	* @Title: joinOrgCodes
	* @Description: 查询已经加入的机构
	* @param userCode
	* @param wxUnionId
	* @return    设定文件
	* @return List<Long>    返回类型
	 */
	public Map<Long,Integer> joinOrgCodes(String userCode,String wxUnionId);

	/**
	 * @Title: inviteOrgUser
	 * @Description: 修改邀请放肆
	 * @param userId
	 * @param inviteType
	 * @param client
	 */
	public void inviteOrgUser(String userId, int inviteType, Client client) throws Exception ;

	/**
	* @Title: getOrgUserBkge
	* @Description: 获取机构用户角色
	* @param orgCode	机构编号
	* @param userCode	用户编号
	* @return OrgUserBkgeResponse    返回类型
	 */
	public OrgUserBkgeResponse getOrgUserBkge(long orgCode, long userCode);

	/**
	* @Title: getUserIsWork
	* @Description: 查询机构用户姓名以及是否在职
	* @param orgCode		机构编号
	* @param userCode	 	用户编号
	* @return QueryOrgUsersResponse    返回类型
	*/
	public QueryOrgUsersResponse getUserIsWork(Long orgCode, Long userCode)throws Exception;
}
